#include <sys/time.h>

#include "./xtime.h"

// 获取当前时间 YYYY-MM-DD HH:MM:SS
char *NowDateTimeStr()
{
    // 静态变量，确保函数返回后字符串仍然有效
    static char datetime_str[20];
    time_t now;
    struct tm *timeinfo;

    time(&now); // 获取当前时间
    timeinfo = localtime(&now); // 转换为本地时间

    // 格式化时间字符串
    strftime(datetime_str, sizeof(datetime_str), "%Y-%m-%d %H:%M:%S", timeinfo);
    return datetime_str;
}

// 获取当前时间的年、月、日
// year: 年指针
// month: 月指针
// day: 日指针
// hour: 时指针
// minute: 分指针
// second: 秒指针
void NowYMDHMS(int *year, int *month, int *day, int *hour, int *minute, int *second)
{
	NowYMD(year, month, day);
	NowHMS(hour, minute, second);
}

// 获取当前时间的年、月、日
// year: 年指针
// month: 月指针
// day: 日指针
void NowYMD(int *year, int *month, int *day)
{
	time_t t = time(NULL);
	struct tm *tm = localtime(&t);
	*year = tm->tm_year + 1900;
	*month = tm->tm_mon + 1;
	*day = tm->tm_mday;
}

// 获取当前时间的时、分、秒
// hour: 时指针
// minute: 分指针
// second: 秒指针
void NowHMS(int *hour, int *minute, int *second)
{
	time_t t = time(NULL);
	struct tm *tm = localtime(&t);
	*hour = tm->tm_hour;
	*minute = tm->tm_min;
	*second = tm->tm_sec;
}

// 获取当前时间的时间戳，单位：秒
// timestamp: 时间戳指针
void NowTimestamp(long *tsSecond)
{
	time_t t = time(NULL);
	*tsSecond = t;
}

// 获取当前时间的时间戳，单位：毫秒
// timestamp: 时间戳指针
void NowTimestampMS(long long *tsMillisecond)
{
	LLONG tmp;
	struct timeval tv;
	gettimeofday(&tv, NULL);
	tmp = tv.tv_sec;
	tmp = tmp * 1000;
	tmp = tmp + (tv.tv_usec / 1000);
	*tsMillisecond = tmp;
}
